musipfandomcom_es-20200213-history
Módulo:Lista de canciones
-------------------------------------------------------------------------- -- -- Lista de canciones -- -- Plantilla: -- Versión: 1.0.3 -- Autor: Daniel Aaron (Usuario:Cameron115963) -- -------------------------------------------------------------------------- -- -- Variables local HtmlBuilder = require('Módulo:HtmlBuilder') local p = {} local marco = {} local raiz local objeto local infodisco local args -- Union function union(t1, t2) local vals = {} for k, v in pairs(t1) do valsv = true end for k, v in pairs(t2) do valsv = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Depuración de etiquetas vacías local function depuracion(contenido) if contenido and contenido ~= '' then return contenido end end -- Obtener números en parámetros } local function obtenerNumero(prefijo) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefijo .. '(1-9%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Información previa function informacion() infodisco = raiz.wikitext() if args'todas_escritas' then -- } infodisco.wikitext('Todas las canciones escritas y compuestas por ' .. args'todas_escritas' .. '. ') else if args'todas_letras' then -- } infodisco.wikitext('Todas las letras escritas por ' .. args.todas_letras) if not args'all_music' or not args'toda_la_música' then infodisco.wikitext('.') end end local compositor = '' if args'all_music' then compositor = args'all_music' elseif args'toda_la_música' then compositor = args'toda_la_música' end if args'all_music' or args'toda_la_música' then -- } if args'todas_letras' then -- Unión de las dos frases con coma (,) infodisco.wikitext(', toda la música compuesta por ' .. compositor .. '. ') else infodisco.wikitext('Toda la música compuesta por ' .. compositor .. '. ') end end end end -- Agregar filas a la tabla de contenido global local function agregarPista(filaArgs) -- Variables globales internas local pista = objeto.tag('tr') pista .tag('td') .cssText('padding-right: 10px; text-align: right; cursor: default; -webkit-user-select:none; -moz-user-select:none; background-color: ' .. filaArgs.bgcolor) .wikitext(filaArgs.numero .. '.') -- Número de la pista ( 1.) -- Título de la pista y notas local titulopista, notaspista if filaArgs.titulo and filaArgs.titulo ~= '' then titulopista = filaArgs.titulo else titulopista = "Sin título" end if filaArgs.notas and filaArgs.notas ~= '' then notaspista = ' (' .. filaArgs.notas .. ') ' else notaspista = '' end local nombrepista = pista.tag('td') nombrepista .cssText('text-align: left; background-color: ' .. filaArgs.bgcolor) .wikitext('«' .. titulopista .. '»' .. notaspista) -- Créditos letras if args'lyrics_credits' and args'lyrics_credits' 'yes' or args'créditos_letras' and args'créditos_letras' 'sí' then local letraspista = pista.tag('td') letraspista .cssText('background-color: ' .. filaArgs.bgcolor) .wikitext(filaArgs.letraspor) end -- Créditos música if args'music_credits' and args'music_credits' 'yes' or args'créditos_música' and args'créditos_música' 'sí' then local musicapista = pista.tag('td') musicapista .cssText('background-color: ' .. filaArgs.bgcolor) .wikitext(filaArgs.musicapor) end -- Créditos escritores if args'writing_credits' and args'writing_credits' 'yes' or args'créditos_escritores' and args'créditos_escritores' 'sí' then local escritopista = pista.tag('td') escritopista .cssText('background-color: ' .. filaArgs.bgcolor) .wikitext(filaArgs.escritopor) end -- Columna extra if args'extra_column' or args'columna_extra' then local columnapista = pista.tag('td') columnapista .cssText('background-color: ' .. filaArgs.bgcolor) .wikitext(filaArgs.extrapor) end -- Duración de la pista local duracionpista = pista.tag('td') duracionpista .cssText('padding-right: 10px; text-align: right; background-color: ' .. filaArgs.bgcolor) .wikitext(filaArgs.duracionpor) end -- Hacer títulos de la tabla local function titulosContenido() if args'title' or args'titulo' or args'título' then local titulopadding = '' if args'ocultar' and args'ocultar' 'si' or args'ocultar' and args'ocultar' 'sí' then titulopadding = 'padding: 2px 4px' end local encabezado = objeto.tag('tr') encabezado .tag('th') .addClass('tlheader mbox-text') .attr('colspan', 10) .cssText('text-align: left; background-color: #fff; width: 100%; ' .. titulopadding) .wikitext(args'title' or args'titulo' or args'título') local cel2 = encabezado.tag('td') cel2.addClass('mbox-empty-cell') else if args'ocultar' and args'ocultar' 'si' or args'ocultar' and args'ocultar' 'sí' then local coloculto = objeto.tag('tr') coloculto .tag('th') .addClass('tlheader mbox-text') .attr('colspan', 10) .cssText('text-align: left; background-color: #fff') local cel3 = coloculto.tag('td') cel3.addClass('mbox-empty-cell') end end local estilopista, num, num2, num3, num4, totalnum, estilomore num = 0 num2 = 0 num3 = 0 num4 = 0 if args'lyrics_credits' and args'lyrics_credits' 'yes' or args'créditos_letras' and args'créditos_letras' 'sí' or args'music_credits' and args'music_credits' 'yes' or args'créditos_música' and args'créditos_música' 'sí' or args'writing_credits' and args'writing_credits' 'yes' or args'créditos_escritores' and args'créditos_escritores' 'sí' or args'extra_column' or args'columna_extra' then if args'lyrics_credits' and args'lyrics_credits' 'yes' or args'créditos_letras' and args'créditos_letras' 'sí' then num = 1 end if args'music_credits' and args'music_credits' 'yes' or args'créditos_música' and args'créditos_música' 'sí' then num2 = 1 end if args'writing_credits' and args'writing_credits' 'yes' or args'créditos_escritores' and args'créditos_escritores' 'sí' then num3 = 1 end if args'extra_column' or args'columna_extra' then num4 = 1 end -- Estilizado totalnum = num+num2+num3+num4 if totalnum 1 then estilopista = 'width: 60%' estilomore = 'width: 40%' elseif totalnum 2 then estilopista = 'width: 40%' estilomore = 'width: 30%' elseif totalnum 3 then estilopista = 'width: 30%' estilomore = 'width: 20%' elseif totalnum 4 then estilopista = 'width: 20%' estilomore = 'width: 20%' end else estilopista = 'width: 100%' estilomore = '' end local titulares = objeto.tag('tr') titulares .tag('th') .cssText('width: 20px; padding-left: 10px; padding-right: 10px; text-align: center; background-color: #eee; height: 20px') .wikitext('N.º') -- Número de la pista local nombrepista = titulares.tag('th') nombrepista .cssText('text-align: left; background-color: #eee; ' .. estilopista) .wikitext('Título') if args'lyrics_credits' and args'lyrics_credits' 'yes' or args'créditos_letras' and args'créditos_letras' 'sí' then local letrista = titulares.tag('th') letrista .cssText('text-align: left; background-color: #eee; ' .. estilomore) .wikitext('Letras') end if args'music_credits' and args'music_credits' 'yes' or args'créditos_música' and args'créditos_música' 'sí' then local musicapista = titulares.tag('th') musicapista .cssText('text-align: left; background-color: #eee; ' .. estilomore) .wikitext('Música') end if args'writing_credits' and args'writing_credits' 'yes' or args'créditos_escritores' and args'créditos_escritores' 'sí' then local escritorespista = titulares.tag('th') escritorespista .cssText('text-align: left; background-color: #eee; ' .. estilomore) .wikitext('Escritor(es)') end if args'extra_column' or args'columna_extra' then local columnaextra = titulares.tag('th') columnaextra .cssText('text-align: left; background-color: #eee; ' .. estilomore) .wikitext(args'extra_column' or args'columna_extra') end local duraciones = titulares.tag('th') duraciones .cssText('padding-right: 5px; width: 60px; text-align: center; background-color: #eee') .wikitext('Duración') local cel5 = titulares.tag('td') cel5.addClass('mbox-empty-cell') end -- Hacer las filas consecutivamente según sean escritas local function hacerLista() -- Detectar idioma del parámetro (inglés/español) local numeroPista = union(obtenerNumero('título'), obtenerNumero('title')) table.sort(numeroPista) for k, num in ipairs(numeroPista) do -- Color de fondo de la fila (Pista) local colorfondo if (num % 2) 0 then colorfondo = '#f7f7f7' else colorfondo = '#fff' end -- Agrega los datos según el parámetro (en inglés o español) agregarPista({ bgcolor = colorfondo, numero = num, titulo = depuracion(args.. num or args.. num), notas = depuracion(args.. num or args.. num), letraspor = depuracion(args.. num or args.. num), musicapor = depuracion(args.. num or args.. num), escritopor = depuracion(args.. num or args.. num), extrapor = depuracion(args.. num), duracionpor = depuracion(args.. num or args.. num) }) end end -- Duración total local function duracionTotal() local duraciontotal = objeto.tag('tr') if args'duración_total' then duraciontotal .tag('td') .attr('colspan', 10) .cssText('padding-right: 10px; text-align: right; background-color: #fff; border-width: 0; font-weight: bold') .wikitext(args'duración_total') local cel8 = duraciontotal.tag('td') cel8.addClass('mbox-empty-cell') end end -- Vericando que el parámetro tenga datos function existenciaDatos(pista) -- TRUE si tiene datos FALSE por defecto if depuracion(pista1) or depuracion(pista'título') then return true end return false end -- Hacer lista de pistas en la tabla function hacerListaTabla(tabla) for k, pista in ipairs(tabla) do if existenciaDatos(pista) then agregarPista({ titulo = depuracion(pista'título' or pista'title'), notas = depuracion(args'notas' or args'note'), letraspor = depuracion(args'letras' or args'lyrics'), musicapor = depuracion(args'música' or args'music'), escritopor = depuracion(args'escritor' or args'writer'), extrapor = depuracion(args'extra'), duracionpor = depuracion(args'duración' or args'length') }) end end end -- Plantilla de lista de canciones function _canciones() --Variables local ocultar, estilos -- Condicionales en _canciones if args'ocultar' and args'ocultar' 'si' or args'ocultar' and args'ocultar' 'sí' then ocultar = 'collapsible collapsed' estilos = 'border: #aaa 1px solid; padding: 3px; margin-bottom: .4em' else ocultar = '' estilos = 'padding: 4px' end -- Constructor global HtmlBuilder raiz = HtmlBuilder.create() -- Información informacion() -- Tabla contenedora objeto = raiz.tag('table') objeto .addClass('tracklist ') .addClass(ocultar) .attr('cellpadding', 0) .cssText('border-collapse: collapse; ' .. estilos) -- Indexar secciones titulosContenido() if not args1 then hacerLista() else hacerListaTabla(args) end duracionTotal() -- Indexar todo en variable global return tostring(raiz) end -- Index function p.lista(frame) local origArgs marco = frame -- Llamado en #invoke par uso de etiquetas de plantilla if frame mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end -- For pairs args = {} for k, v in pairs(origArgs) do if v ~= '' then argsk = v end end -- Indexar plantilla de lista de canciones return _canciones() end return p